//数据库
const db = wx.cloud.database()//数据库
//方法调用
const mqtt = require("../../utils/mqtt")//采用MQTT协议
const time = require("../../utils/time")
//定义全局变量
const app = getApp()
const gb = app.globalData
const wxp = gb.wxp
//其他配置数据处理函数
function bit_operation(arr)
{
  //这样约定operation的数据组成:
  //共9个字节，高两位是风速度，第四位是温度，其他都是用一位配置空调属性，从高到底分别是模式，风向和睡眠
  let mid=arr[0]
  arr[0]=arr[1]
  arr[1]=mid

  let result=0
  for(let i=0;i<4;i++)
  {
    if(arr[i]==0)
    {
      if(i==0)
      {
        result&=127 //舍弃高2位
      }
      result&=~(arr[i]<<(7-i))//位写0
    }
    else
    {
      if(i==0)
      {
        result&=127 //舍弃高2位
      }
       result|=(arr[i]<<(7-i))//置位
    }

  }
  return result
}
//其他设置的数据解析，即对9位中的前5位处理
function dataAnalysis(Data)
{
  var buffer=new Array()
  let local_data=(Data&511)>>4

  buffer[0]=(local_data&4)>>2
  buffer[1]=local_data>>3
  buffer[2]=(local_data&2)>>1
  buffer[3]=local_data&1

  return buffer
}
Page({
  /**
   * 页面的初始数据
   */
  data: {
    index0:0,
    type:['格力','美的'],

    array: ['16℃', '17℃', '18℃', '19℃', '20℃', '21℃', '22℃', '23℃', '24℃', '25℃', '26℃', '27℃', '28℃', '29℃', '30℃'],
    multiArray: [['制冷', '除湿'], ['微风','中风','大风'],['定向', '扫风'], ['正常','睡眠']],
     //设置1数据
     index1: 0,
     multiIndex1: [0,0, 0, 0],
     time1: '12:01',

    //设置2数据
    index2: 0,
    multiIndex2: [0,0, 0, 0],
    time2: '12:01',
    //设置3数据
     index3: 0,
     multiIndex3: [0,0, 0, 0],
     time3: '12:01',
  },

  //时间选择函数
  bindTimeChange: function(e) {
    let time,my_hour,my_min
    console.log('当前选择时间发生改变，已被修改为', e.detail.value)
    //字符串处理与数据处理
    time=(e.detail.value).replace(/[^0-9]/ig,"")//正则表达式，只取数字
    my_hour=parseInt(time/100)//前两位表示小时
    my_min=time%100//后两位表示分钟

    if(e.target.id=="1")
    {
    this.setData({
      time1 : e.detail.value
    })
    db.collection('timer').doc('d81cd5415f775d3400d3a5a213142a35').update({
      data:{
        timeObject:{
          hour:my_hour,
          min:my_min
        }
      }
    }).then(res=>{
      console.log(res)
    })
    }
    else if(e.target.id=="2")
    {
    this.setData({
      time2 : e.detail.value
    })
    db.collection('timer').doc('1b64dd7b5f79de7c0116bf3a6490072e').update({
      data:{
        timeObject:{
          hour:my_hour,
          min:my_min
        }
      }
    }).then(res=>{
      console.log(res)
    })
    }
    else
    {
      this.setData({
        time3 : e.detail.value
      })
      db.collection('timer').doc('8e5be7055f79df140144835403152c30').update({
        data:{
          timeObject:{
            hour:my_hour,
            min:my_min
          }
        }
      }).then(res=>{
        console.log(res)
      })
    }
    
  },
  bindTypeChange: function(e){
    this.setData({
      index0 : e.detail.value
    })
    wx.showToast({
      title: '型号已更换',
      icon: "none"
    })
  },
//温度选择函数
  bindPickerChange: function(e) {
    let dataBase_temp                            //拉取数据库
    let my_temp=Number(e.detail.value)+Number(16)//取数组下标+16=温度
    let real_temp                                //温度导入operation
    if(e.target.id=="1")
    {
    this.setData({
      index1 : e.detail.value
    })
      //从数据库拉取温度数据
     db.collection('timer').doc('d81cd5415f775d3400d3a5a213142a35').get().then(res => { 
     // TODO 
      dataBase_temp = (res.data.operation & 496)//高5位保留，舍弃低四位 
      //496，换成2进制是11111 0000 
      //低4位存储温度数据 
      real_temp = dataBase_temp | e.detail.value  //低4位重新赋值，组成operation的值     
      
      console.log('修改温度后的operation1二进制值:',real_temp.toString(2))
      return db.collection('timer').doc('d81cd5415f775d3400d3a5a213142a35').update({ 
      data: { 
        temp: my_temp, 
        operation: real_temp 
         } 
       }) 
     })
    }
    else if(e.target.id=="2")
    {
    this.setData({
      index2 : e.detail.value
    })
    //从数据库拉取温度数据
    db.collection('timer').doc('1b64dd7b5f79de7c0116bf3a6490072e').get().then(res => { 
      // TODO 
    dataBase_temp = (res.data.operation & 496)//高5位保留，舍弃低四位 
      //496，换成2进制是11111 0000 
      //低4位存储温度数据 
    real_temp = dataBase_temp | e.detail.value  //低4位重新赋值，组成operation的值    

    console.log('修改温度后的operation2二进制值:',real_temp.toString(2)) 

    return db.collection('timer').doc('1b64dd7b5f79de7c0116bf3a6490072e').update({ 
      data: { 
        temp: my_temp, 
       operation: real_temp 
        } 
      }) 
     })
    }
    else
    {
      this.setData({
        index3 : e.detail.value
      })
      //从数据库拉取温度数据
      db.collection('timer').doc('8e5be7055f79df140144835403152c30').get().then(res => { 
        // TODO 
      dataBase_temp = (res.data.operation & 496)//高5位保留，舍弃低四位 
        //496，换成2进制是11111 0000 
        //低4位存储温度数据 
      real_temp = dataBase_temp | e.detail.value  //低4位重新赋值，组成operation的值    
  
      console.log('修改温度后的operation3二进制值:',real_temp.toString(2))
  
      return db.collection('timer').doc('8e5be7055f79df140144835403152c30').update({ 
        data: { 
          temp: my_temp, 
          operation: real_temp 
          } 
        }) 
       })
    }
    console.log('当前选择温度发生改变，已被修改为', my_temp)
  },
  //其他配置选择——Part1
  bindMultiPickerChange: function (e) {
    /* 变量定义 */
    let dataBase_operation                            //拉取数据库
    let multiIndex=e.detail.value                     //下标数据
    let my_operation                                  //最终传递数据

    console.log('picker发送选择改变，携带值为', e.detail.value)
    
    if(e.target.id == "1")
    {
      this.setData({
        multiIndex1: e.detail.value
      })
      my_operation=bit_operation(multiIndex)
      //从数据库拉取operation数据
      db.collection('timer').doc('d81cd5415f775d3400d3a5a213142a35').get().then(res=>{
        dataBase_operation=(res.data.operation&15)//高五位舍弃
                                                  //15换成二进制就是00000 1111
        my_operation|=dataBase_operation
        console.log('修改温度后的operation1二进制值:',my_operation.toString(2))
        return db.collection('timer').doc('d81cd5415f775d3400d3a5a213142a35').update({ 
          data: { 
            operation: my_operation 
             } 
           }) 
      })
    }
    else if(e.target.id == "2")
    {
      this.setData({
      multiIndex2: e.detail.value
      })
      my_operation=bit_operation(multiIndex)
      //从数据库拉取operation数据
      db.collection('timer').doc('1b64dd7b5f79de7c0116bf3a6490072e').get().then(res=>{
        dataBase_operation=(res.data.operation&15)//高五位舍弃
                                                  //15换成二进制就是00000 1111
        my_operation|=dataBase_operation
        console.log('修改温度后的operation2二进制值:',my_operation.toString(2))
        return db.collection('timer').doc('1b64dd7b5f79de7c0116bf3a6490072e').update({ 
          data: { 
            operation: my_operation 
             } 
           }) 
      })
    }
    else
    {
      this.setData({
      multiIndex3: e.detail.value
      })
      my_operation=bit_operation(multiIndex)
      //从数据库拉取operation数据
      db.collection('timer').doc('8e5be7055f79df140144835403152c30').get().then(res=>{
        dataBase_operation=(res.data.operation&15)//高五位舍弃
                                                  //15换成二进制就是00000 1111
        my_operation|=dataBase_operation
        console.log('修改温度后的operation3二进制值:',my_operation.toString(2))
        return db.collection('timer').doc('8e5be7055f79df140144835403152c30').update({ 
          data: { 
            operation: my_operation 
          } 
        }) 
      })
    }
  },
    //其他配置选择——Part2
  bindMultiPickerColumnChange: function (e) {
    let  multiIndex
    if(e.target.id == "1")
    {
      multiIndex=this.data.multiIndex1
    }
    else if(e.target.id == "2")
    {
      multiIndex=this.data.multiIndex2
    }
    else
    {
      multiIndex=this.data.multiIndex3
    }
    multiIndex[e.detail.column] = e.detail.value;
    console.log('修改的列为', e.detail.column, '，值为', e.detail.value);

    //此处暂无需要的操作，在模板基础上先空着
    // switch (e.detail.column) {
    //   case 0:
    //     switch (multiIndex[0]) {
    //       case 0:
    //         //TODO
    //         break;
    //       case 1:
    //         //TODO
    //         break;
    //     }
    //     multiIndex[1] = 0;
    //     multiIndex[2] = 0;
    //     multiIndex[3] = 0;
    //     break;
    //   case 1:
    //     switch (multiIndex[0]) {
    //       case 0:
    //         switch (multiIndex[1]) {
    //           case 0:
    //             //TODO
    //             break;
    //           case 1:
    //             //TODO
    //             break;
    //           case 2:
    //             //TODO
    //           break;
    //         }
    //         break;
    //       case 1:
    //         switch (multiIndex[1]) {
    //           case 0:
    //             //TODO
    //             break;
    //           case 1:
    //             //TODO
    //             break;
    //         }
    //         break;
    //     }
    //     multiIndex[2] = 0;
    //     multiIndex[3] = 0;
    //     break;
    //   case 2:
    //     multiIndex[3] = 0;
    //     break;
    // }
    //this.setData(multiIndex);
  },
  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {
    // 获取mqtt实例
    // if (gb.client == '') {
    //   gb.clientCallback = res => {
    //     this.setData({ client: gb.client })
    //   }
    // } else {
    //   this.setData({ client: gb.client })
    // }
    let local_time1,local_time2,local_time3
    let local_multiIndex1,local_multiIndex2,local_multiIndex3
    let operation1,operation2,operation3

    db.collection('timer').get().then(res=>{
        if(res.data[0].timeObject.min<10)
        {
          local_time1=res.data[0].timeObject.hour+':'+'0'+res.data[0].timeObject.min
        }
        else
          local_time1=res.data[0].timeObject.hour+':'+res.data[0].timeObject.min

        if(res.data[1].timeObject.min<10)
        {
          local_time2=res.data[1].timeObject.hour+':'+'0'+res.data[1].timeObject.min
        }
        else
          local_time2=res.data[1].timeObject.hour+':'+res.data[1].timeObject.min

        if(res.data[2].timeObject.min<10)
        {
          local_time3=res.data[2].timeObject.hour+':'+'0'+res.data[2].timeObject.min
        }
        else
          local_time3=res.data[2].timeObject.hour+':'+res.data[2].timeObject.min


        operation1=res.data[0].operation
        operation2=res.data[1].operation
        operation3=res.data[2].operation

        local_multiIndex1=dataAnalysis(operation1)
        local_multiIndex2=dataAnalysis(operation2)
        local_multiIndex3=dataAnalysis(operation3)
        // console.log('multiIndex1:',local_multiIndex1)
        // console.log('multiIndex2:',local_multiIndex2)
        // console.log('multiIndex3:',local_multiIndex3)

        this.setData({
          index1:(operation1&15),
          index2:(operation2&15),
          index3:(operation3&15),

          time1:local_time1,
          time2:local_time2,
          time3:local_time3,

          multiIndex1:local_multiIndex1,
          multiIndex2:local_multiIndex2,
          multiIndex3:local_multiIndex3
          })
          console.log('获取用户设置数据成功')
    })

  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady: function () {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow: function () {

  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide: function () {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload: function () {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh: function () {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom: function () {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage: function () {

  }
})